#ifndef CLIENT_H
#define CLIENT_H

#include <QtNetwork>

#include "actionnet.h"

class Joueur;


/**
 * @author LOPEZ CARON
 * @brief Partie concernant le réseau, s'occupe de la partie client
 */
class Client : public QObject
{
    Q_OBJECT


public:
    Client();
    void connexion(QString host, int port);
    void deconnexion();
    void envoyerDonnees(ActionNet type, QString message);

signals:
    //void dispatch(ACTIONNET type, QString message);
    void connecte();
    void deconnecte();

    void recvJoueurConnexion(Joueur *joueur);
    void recvJoueurDeconnexion(int id);
    void recvJoueursList(QList<Joueur*> joueurs);
    void recvJoueurId(int id);
    void recvMessage(QString src, QString msg, QString dest);
    void recvPaysList(QHash<int, int> etatsjoueurs);
    void recvPionAdd(int etatid);
    void recvPionRm(int etatid);
    void recvChangeStatut(int etape);
    void recvInitialise(QString valeurs);
    void recvSetJoueur(QString data);
    

public slots:
    void close();

private slots:
    void donneesRecues();
    void erreurSocket(QAbstractSocket::SocketError erreur);

protected:
    void dispatch(ActionNet type, QString donnee);

    void actJoueurConnexion(QString donnee);
    void actJoueurDeconnexion(QString donnee);
    void actJoueursList(QString donnee);
    void actJoueurId(QString donnee);
    void actMessage(QString donnee);
    void actPaysList(QString donnee);
    void actPionAdd(QString donnee);
    void actPionRm(QString donnee);
    void actChangeStatut(QString donnee);
    void actInitialise(QString donnee);
    void actSetJoueur(QString donnee);

private:
    QTcpSocket *socket; // Reprsente le serveur
    quint16 tailleMessage;
    int numport;
};

#endif // CLIENT_H
